package com.simple.rpc.component.registry;

import com.simple.rpc.Component;
import com.simple.rpc.config.ApplicationConfig;
import com.simple.rpc.config.ServiceConfig;

import java.util.Map;

/**
 * 注册到注册中心
 *
 * @author mhh
 * @since 2020/9/18
 */
public interface Registry extends Component {

    /**
     * 把要发布的服务信息发布到注册中心上
     * 服务发布者调用
     *
     * @param serviceConfig 发布接口配置
     */
    void registry(ServiceConfig serviceConfig);

    /**
     * 订阅
     *
     * @param serviceConfig 发布接口配置
     */
    void subscribe(ServiceConfig serviceConfig);

    /**
     * 获取服务提供者
     * 服务消费者调用
     *
     * @param serviceConfig 发布接口配置
     * @return serviceName->applicationConfig
     */
    Map<String, ApplicationConfig> getProviders(ServiceConfig serviceConfig);

    /**
     * 服务下线
     *
     * @param serviceConfig 发布接口配置
     */
    void offline(ServiceConfig serviceConfig);
}
